home *** CD-ROM | disk | FTP | other *** search
- /*
- * CopyRight 1995. Nicholas Poljakov all rights reserved.
- */
- #include <malloc.h>
- #include <dos.h>
- #include <stdio.h>
- #include "state1.h"
- #include "vto.h"
- #define ACSEND '\x6C' /* ¬«¡Ñµ »«½∩ */
- #define SBA '\x11' /* πßΓá¡«ó¿Γ∞ áñpÑß íπΣÑpá */
- #define SF '\x1D' /* ¡áτὫ »«½∩ */
-
- tpanel(tp_id,conv_id,code,sub_code,position,data_ptr,
- n,p_rc,s_hdr)
-
- unsigned char tp_id[8];
- unsigned long conv_id;
- unsigned char code;
- unsigned char sub_code;
- unsigned char position[2];
- unsigned char *data_ptr;
- unsigned int n;
- struct rc {
- unsigned int prim ;
- unsigned long sec ; } *p_rc;
- struct shdr {
- unsigned int aid ;
- unsigned char col ;
- unsigned char row ; } * s_hdr;
-
- {
- char *vtout(),*out_flow;
- void vtin();
- char *p;
- unsigned int length,len,addr;
- unsigned char rts;
- char *d_ptr;
- int max_length;
- unsigned char wr; /*what receive */
- char *out_str;
-
- switch (code) {
-
- case W :
- case EW:
- case E :
- case EU:
- case WB :
-
- out_flow = vtout(data_ptr,n);
- length = strlen(out_flow) + 2;
- if ((out_str = malloc(length + 2 + 1)) == NULL) {
- return -1;
- }
- strcpy(&out_str[2], out_flow);
- out_str[0] = code;
- out_str[1] = sub_code;
- send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
- free( out_str );
-
- return (p_rc);
- break;
-
- case R :
- case RM :
- case TM :
- case TP :
-
- if ((out_str = malloc( 2 )) == NULL) {
- return -1;
- }
- out_str[0] = code;
- out_str[1] = sub_code;
- length = 2;
- send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
- free( out_str );
-
- max_length = 2017;
- recwait (tp_id, conv_id, ll, p_rc, &len, max_length, &rts, d_ptr, &wr);
-
-
- s_hdr-> aid =d_ptr[1];
- addr = (d_ptr[2] & 0x3f) * 64 + (d_ptr[3] & 0x3f);
- s_hdr->col = addr % 80 + 1;
- s_hdr->row = addr / 80 + 1;
-
- length = len - 3;
- vtin((d_ptr+3),length,data_ptr,n);
- return(s_hdr,data_ptr);
- }
- }
- /*--------------------- vtin ----------------------------*/
-
- void vtin(p,lengvp,pst,nStr)
- char *p;
- struct area *pst;
- int lengvp,nStr;
-
- {
- int i,j,ind,rp=0;
- struct area *p1;
- unsigned int addr;
-
- for(j=0; j < nStr; j++)
- {
- p1=pst+j;
-
- if(*p == SBA)
- {
- addr = (*(p+1) & 0x3f) * 64 + (*(p+2) & 0x3f);
- p1 -> row = addr/80 + 1;
- p1 -> column = addr % 80 + 1;
- goto m;
- printf("ERROR\n");goto end;
-
- m: ind=0;
- rp=rp+3;
-
- while(*(p + 3 + ind)!=SBA)
- {
- *((p1->data_in)+ind)=*((p+3)+ind);
-
- ind++;
- rp++;
-
- if(rp > lengvp)
- {
- p1->length=ind-1;
- goto end;
- } /* end if */
-
- } /* end while */
- p1 -> length = ind;
- p=p+3+ind;
-
- } /* end if */
-
- } /* end for */
- end: ;
-
- } /* end vtin */
-
-
- /*--------------------- vtout ----------------------------*/
-
- char *vtout(p,nStr)
- struct area *p;
- int nStr;
- {
- char screen[64];
- unsigned int addr;
- unsigned int j,z,RP=0,RP1=0,SHAB;
- char ACS,*pvp,*p2;
- struct area *p1;
- int A,B;
- #include "tablecod.h"
-
- /*--------------------------------------------------------*/
-
- for(j=0; j < nStr; j++)
- {
- p1=p+j;
- RP1=(p1->length) + FSIZEWP + RP1;
- }; /* end for */
-
- pvp=malloc(RP1);
- p2 = pvp;
-
- for(z=0; z < nStr; z++)
- {
- SHAB = 0;
- p1=p+z;
- RP = p1 -> flag.protected;
- SHAB = SHAB | RP;
- SHAB = SHAB << 1;
- RP = p1 -> flag.digit;
- SHAB = SHAB | RP;
- SHAB = SHAB << 2;
- RP = p1 -> flag.displayed;
- SHAB = SHAB | RP;
- SHAB = SHAB << 2;
- RP = p1 -> flag.modified;
- SHAB = SHAB | RP;
-
- switch(SHAB){
- case 0 : ACS='\x40';break;
- case 1 : ACS='\xC1';break;
- case 4 : ACS='\xC4';break;
- case 5 : ACS='\xC5';break;
- case 8 : ACS='\xC8';break;
- case 9 : ACS='\xC9';break;
- case 12 : ACS='\x4C';break;
- case 13 : ACS='\x4D';break;
- case 16 : ACS='\x50';break;
- case 17 : ACS='\xD1';break;
- case 20 : ACS='\xD4';break;
- case 21 : ACS='\xD5';break;
- case 24 : ACS='\xD8';break;
- case 25 : ACS='\xD9';break;
- case 28 : ACS='\x5C';break;
- case 29 : ACS='\x5D';break;
- case 32 : ACS='\x60';break;
- case 33 : ACS='\x61';break;
- case 36 : ACS='\xE4';break;
- case 37 : ACS='\xE5';break;
- case 40 : ACS='\xE8';break;
- case 41 : ACS='\xE9';break;
- case 44 : ACS='\x6C';break;
- case 45 : ACS='\x6D';break;
- case 48 : ACS='\xF0';break;
- case 49 : ACS='\xF1';break;
- case 52 : ACS='\xF4';break;
- case 53 : ACS='\xF5';break;
- case 56 : ACS='\xF8';break;
- case 57 : ACS='\xF9';break;
- case 60 : ACS='\x7C';break;
- case 61 : ACS='\x7D';break;
- default : break;
- } /* end switch */
-
- *p2 = SBA;
-
- addr = (p1->row-1)*80+(p1->column-1);
- A = addr / 64 ;
- B = addr % 64 ;
-
- *(p2+1) = screen[A];
- *(p2+2) = screen[B];
- *(p2+3) = SF;
- *(p2+4) = ACS;
- strncpy((p2+5),p1 -> data_out,p1 ->length);
- *(p2+5+(p1->length)) = SF;
- *(p2+6+(p1->length)) = ACSEND;
- p2 = (p2+FSIZEWP+(p1->length));
- } /* end for */
-
-
- /*--------------------------------------------------------*/
-
- return(pvp);
-
- } /* end vtout */
-